﻿using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Resources;
using System.Text;
using System.Web;
using Newtonsoft.Json.Linq;

namespace Micua.Utility
{
    /// <summary>
    /// String拓展类(Culture)
    /// </summary>
    public static class CultureHelper
    {
        private static ResourceSet _resourceSet;

        static CultureHelper()
        {
            //if (HttpContext.Current == null) return;

            //var vPath = string.Format(ConfigHelper.GetString("lang_path_format"), culture);
            //var fPath = ApplicationHelper.MapPath(vPath);

            //if (!File.Exists(fPath))
            //    fPath = ApplicationHelper.MapPath(ConfigHelper.GetString("lang_default_path"));

            //if (!File.Exists(fPath))
            //    return;
        }

        #region 获取语言化字符串 +static string GetCultureString(string key)
        /// <summary>
        /// 获取语言化字符串
        /// </summary>
        /// <param name="key">原文键</param>
        /// <param name="culture">区域</param>
        /// <returns>语言化字符串</returns>
        public static string GetCultureString(this string key, string culture = "zh-CN")
        {
            if (_resourceSet != null)
            {
                    var res = _resourceSet.GetString(key);
                    return string.IsNullOrEmpty(res) ? key : res;
            }

            lock ("CultureHelper")
            {
                if (_resourceSet != null)
                {
                    var res = _resourceSet.GetString(key);
                    return string.IsNullOrEmpty(res) ? key : res;
                }
                if (HttpContext.Current == null) return key;

                var vPath = string.Format(ConfigHelper.GetString("lang_path_format"), culture);
                var fPath = ApplicationHelper.MapPath(vPath);

                if (!File.Exists(fPath))
                    fPath = ApplicationHelper.MapPath(ConfigHelper.GetString("lang_default_path"));

                if (!File.Exists(fPath))
                    return key;
                //using (var set = new ResourceSet(fPath))
                //{
                //    //CacheHelper.SetCache(vPath, set);
                //    var res = set.GetString(key);
                //    return string.IsNullOrEmpty(res) ? key : res;
                //}
                _resourceSet = new ResourceSet(fPath);
            }
                var res2 = _resourceSet.GetString(key);
                return string.IsNullOrEmpty(res2) ? key : res2;

        }
        #endregion

        #region 将一个字符串翻译成英文 +static string Translate(string str)
        /// <summary>
        /// 将一个字符串翻译成英文
        /// </summary>
        /// <remarks>
        ///  2013-12-22 17:42:30 Created By iceStone
        /// </remarks>
        /// <param name="str">待翻译的字符串</param>
        /// <returns>英文字符串</returns>
        public static string Translate(string str)
        {
            const string serverUrl = "http://openapi.baidu.com/public/2.0/bmt/translate";

            var json = HttpHelper.Get(serverUrl, new { from = "auto", to = "en", client_id = "ZOsMXO77GjGly2jLGWFqPGYc", q = str });

            var jsonObj = JsonHelper.DeserializeObject(json);
            if (!jsonObj.HasValues) throw new Exception("Translate Failed");

            JToken temp;
            if (jsonObj.TryGetValue("error_code", out temp))
            {
                throw new Exception("Translate Failed,Error Code:" + temp);
            }
            var res = jsonObj.GetValue("trans_result");
            var ress = res[0]["dst"].ToString();
            return ress;
        }
        #endregion

        #region PinYinDict
        private static readonly Dictionary<int, string> PinYinDict = new Dictionary<int, string> 
        {
            { -20319, "a" },
            { -20317, "ai" }, 
            { -20304, "an" }, 
            { -20295, "ang" }, 
            { -20292, "ao" }, 
            { -20283, "ba" }, 
            { -20265, "bai" }, 
            { -20257, "ban" }, 
            { -20242, "bang" }, 
            { -20230, "bao" }, 
            { -20051, "bei" }, 
            { -20036, "ben" }, 
            { -20032, "beng" }, 
            { -20026, "bi" }, 
            { -20002, "bian" }, 
            { -19990, "biao" }, 
            { -19986, "bie" }, 
            { -19982, "bin" }, 
            { -19976, "bing" }, 
            { -19805, "bo" }, 
            { -19784, "bu" }, 
            { -19775, "ca" }, 
            { -19774, "cai" }, 
            { -19763, "can" }, 
            { -19756, "cang" }, 
            { -19751, "cao" }, 
            { -19746, "ce" },
            { -19741, "ceng" }, 
            { -19739, "cha" }, 
            { -19728, "chai" }, 
            { -19725, "chan" }, 
            { -19715, "chang" }, 
            { -19540, "chao" }, 
            { -19531, "che" }, 
            { -19525, "chen" }, 
            { -19515, "cheng" }, 
            { -19500, "chi" }, 
            { -19484, "chong" }, 
            { -19479, "chou" }, 
            { -19467, "chu" }, 
            { -19289, "chuai" }, 
            { -19288, "chuan" }, 
            { -19281, "chuang" }, 
            { -19275, "chui" }, 
            { -19270, "chun" },
            { -19263, "chuo" }, 
            { -19261, "ci" }, 
            { -19249, "cong" }, 
            { -19243, "cou" }, 
            { -19242, "cu" }, 
            { -19238, "cuan" }, 
            { -19235, "cui" }, 
            { -19227, "cun" }, 
            { -19224, "cuo" }, 
            { -19218, "da" }, 
            { -19212, "dai" }, 
            { -19038, "dan" }, 
            { -19023, "dang" },
            { -19018, "dao" }, 
            { -19006, "de" }, 
            { -19003, "deng" }, 
            { -18996, "di" }, 
            { -18977, "dian" }, 
            { -18961, "diao" }, 
            { -18952, "die" }, 
            { -18783, "ding" }, 
            { -18774, "diu" }, 
            { -18773, "dong" }, 
            { -18763, "dou" }, 
            { -18756, "du" }, 
            { -18741, "duan" }, 
            { -18735, "dui" }, 
            { -18731, "dun" }, 
            { -18722, "duo" }, 
            { -18710, "e" }, 
            { -18697, "en" }, 
            { -18696, "er" }, 
            { -18526, "fa" },
            { -18518, "fan" }, 
            { -18501, "fang" }, 
            { -18490, "fei" }, 
            { -18478, "fen" }, 
            { -18463, "feng" }, 
            { -18448, "fo" }, 
            { -18447, "fou" }, 
            { -18446, "fu" }, 
            { -18239, "ga" }, 
            { -18237, "gai" }, 
            { -18231, "gan" }, 
            { -18220, "gang" }, 
            { -18211, "gao" }, 
            { -18201, "ge" },
            { -18184, "gei" }, 
            { -18183, "gen" }, 
            { -18181, "geng" }, 
            { -18012, "gong" }, 
            { -17997, "gou" }, 
            { -17988, "gu" }, 
            { -17970, "gua" }, 
            { -17964, "guai" }, 
            { -17961, "guan" }, 
            { -17950, "guang" }, 
            { -17947, "gui" }, 
            { -17931, "gun" }, 
            { -17928, "guo" },
            { -17922, "ha" }, 
            { -17759, "hai" }, 
            { -17752, "han" }, 
            { -17733, "hang" }, 
            { -17730, "hao" }, 
            { -17721, "he" }, 
            { -17703, "hei" },
            { -17701, "hen" }, 
            { -17697, "heng" }, 
            { -17692, "hong" }, 
            { -17683, "hou" }, 
            { -17676, "hu" }, 
            { -17496, "hua" }, 
            { -17487, "huai" }, 
            { -17482, "huan" }, 
            { -17468, "huang" }, 
            { -17454, "hui" }, 
            { -17433, "hun" }, 
            { -17427, "huo" }, 
            { -17417, "ji" }, 
            { -17202, "jia" }, 
            { -17185, "jian" }, 
            { -16983, "jiang" }, 
            { -16970, "jiao" }, 
            { -16942, "jie" }, 
            { -16915, "jin" }, 
            { -16733, "jing" }, 
            { -16708, "jiong" }, 
            { -16706, "jiu" }, 
            { -16689, "ju" }, 
            { -16664, "juan" }, 
            { -16657, "jue" }, 
            { -16647, "jun" }, 
            { -16474, "ka" }, 
            { -16470, "kai" }, 
            { -16465, "kan" }, 
            { -16459, "kang" }, 
            { -16452, "kao" },
            { -16448, "ke" }, 
            { -16433, "ken" }, 
            { -16429, "keng" }, 
            { -16427, "kong" }, 
            { -16423, "kou" }, 
            { -16419, "ku" }, 
            { -16412, "kua" }, 
            { -16407, "kuai" }, 
            { -16403, "kuan" }, 
            { -16401, "kuang" }, 
            { -16393, "kui" }, 
            { -16220, "kun" }, 
            { -16216, "kuo" }, 
            { -16212, "la" }, 
            { -16205, "lai" }, 
            { -16202, "lan" }, 
            { -16187, "lang" }, 
            { -16180, "lao" }, 
            { -16171, "le" }, 
            { -16169, "lei" }, 
            { -16158, "leng" }, 
            { -16155, "li" }, 
            { -15959, "lia" }, 
            { -15958, "lian" }, 
            { -15944, "liang" }, 
            { -15933, "liao" }, 
            { -15920, "lie" }, 
            { -15915, "lin" }, 
            { -15903, "ling" }, 
            { -15889, "liu" }, 
            { -15878, "long" }, 
            { -15707, "lou" }, 
            { -15701, "lu" },
            { -15681, "lv" }, 
            { -15667, "luan" }, 
            { -15661, "lue" }, 
            { -15659, "lun" }, 
            { -15652, "luo" }, 
            { -15640, "ma" }, 
            { -15631, "mai" },
            { -15625, "man" }, 
            { -15454, "mang" }, 
            { -15448, "mao" }, 
            { -15436, "me" }, 
            { -15435, "mei" }, 
            { -15419, "men" }, 
            { -15416, "meng" }, 
            { -15408, "mi" }, 
            { -15394, "mian" }, 
            { -15385, "miao" }, 
            { -15377, "mie" }, 
            { -15375, "min" }, 
            { -15369, "ming" }, 
            { -15363, "miu" }, 
            { -15362, "mo" }, 
            { -15183, "mou" }, 
            { -15180, "mu" }, 
            { -15165, "na" }, 
            { -15158, "nai" }, 
            { -15153, "nan" }, 
            { -15150, "nang" }, 
            { -15149, "nao" }, 
            { -15144, "ne" }, 
            { -15143, "nei" }, 
            { -15141, "nen" }, 
            { -15140, "neng" }, 
            { -15139, "ni" }, 
            { -15128, "nian" }, 
            { -15121, "niang" }, 
            { -15119, "niao" }, 
            { -15117, "nie" }, 
            { -15110, "nin" }, 
            { -15109, "ning" }, 
            { -14941, "niu" }, 
            { -14937, "nong" }, 
            { -14933, "nu" }, 
            { -14930, "nv" }, 
            { -14929, "nuan" }, 
            { -14928, "nue" }, 
            { -14926, "nuo" }, 
            { -14922, "o" }, 
            { -14921, "ou" }, 
            { -14914, "pa" }, 
            { -14908, "pai" }, 
            { -14902, "pan" }, 
            { -14894, "pang" },
            { -14889, "pao" }, 
            { -14882, "pei" }, 
            { -14873, "pen" }, 
            { -14871, "peng" }, 
            { -14857, "pi" }, 
            { -14678, "pian" }, 
            { -14674, "piao" }, 
            { -14670, "pie" }, 
            { -14668, "pin" }, 
            { -14663, "ping" }, 
            { -14654, "po" }, 
            { -14645, "pu" }, 
            { -14630, "qi" },
            { -14594, "qia" }, 
            { -14429, "qian" }, 
            { -14407, "qiang" }, 
            { -14399, "qiao" }, 
            { -14384, "qie" }, 
            { -14379, "qin" },
            { -14368, "qing" }, 
            { -14355, "qiong" }, 
            { -14353, "qiu" }, 
            { -14345, "qu" }, 
            { -14170, "quan" }, 
            { -14159, "que" }, 
            { -14151, "qun" }, 
            { -14149, "ran" }, 
            { -14145, "rang" }, 
            { -14140, "rao" }, 
            { -14137, "re" }, 
            { -14135, "ren" }, 
            { -14125, "reng" }, 
            { -14123, "ri" }, 
            { -14122, "rong" }, 
            { -14112, "rou" }, 
            { -14109, "ru" }, 
            { -14099, "ruan" }, 
            { -14097, "rui" }, 
            { -14094, "run" }, 
            { -14092, "ruo" }, 
            { -14090, "sa" }, 
            { -14087, "sai" }, 
            { -14083, "san" }, 
            { -13917, "sang" }, 
            { -13914, "sao" }, 
            { -13910, "se" }, 
            { -13907, "sen" }, 
            { -13906, "seng" }, 
            { -13905, "sha" }, 
            { -13896, "shai" }, 
            { -13894, "shan" }, 
            { -13878, "shang" }, 
            { -13870, "shao" }, 
            { -13859, "she" }, 
            { -13847, "shen" }, 
            { -13831, "sheng" }, 
            { -13658, "shi" }, 
            { -13611, "shou" },
            { -13601, "shu" }, 
            { -13406, "shua" }, 
            { -13404, "shuai" }, 
            { -13400, "shuan" }, 
            { -13398, "shuang" }, 
            { -13395, "shui" },
            { -13391, "shun" }, 
            { -13387, "shuo" }, 
            { -13383, "si" }, 
            { -13367, "song" }, 
            { -13359, "sou" }, 
            { -13356, "su" }, 
            { -13343, "suan" }, 
            { -13340, "sui" }, 
            { -13329, "sun" }, 
            { -13326, "suo" }, 
            { -13318, "ta" }, 
            { -13147, "tai" }, 
            { -13138, "tan" },
            { -13120, "tang" }, 
            { -13107, "tao" }, 
            { -13096, "te" }, 
            { -13095, "teng" }, 
            { -13091, "ti" }, 
            { -13076, "tian" }, 
            { -13068, "tiao" }, 
            { -13063, "tie" }, 
            { -13060, "ting" }, 
            { -12888, "tong" }, 
            { -12875, "tou" }, 
            { -12871, "tu" }, 
            { -12860, "tuan" }, 
            { -12858, "tui" }, 
            { -12852, "tun" }, 
            { -12849, "tuo" }, 
            { -12838, "wa" }, 
            { -12831, "wai" }, 
            { -12829, "wan" }, 
            { -12812, "wang" }, 
            { -12802, "wei" }, 
            { -12607, "wen" }, 
            { -12597, "weng" }, 
            { -12594, "wo" }, 
            { -12585, "wu" }, 
            { -12556, "xi" }, 
            { -12359, "xia" }, 
            { -12346, "xian" }, 
            { -12320, "xiang" }, 
            { -12300, "xiao" }, 
            { -12120, "xie" }, 
            { -12099, "xin" }, 
            { -12089, "xing" }, 
            { -12074, "xiong" }, 
            { -12067, "xiu" }, 
            { -12058, "xu" }, 
            { -12039, "xuan" }, 
            { -11867, "xue" }, 
            { -11861, "xun" }, 
            { -11847, "ya" }, 
            { -11831, "yan" }, 
            { -11798, "yang" }, 
            { -11781, "yao" }, 
            { -11604, "ye" }, 
            { -11589, "yi" },
            { -11536, "yin" }, 
            { -11358, "ying" }, 
            { -11340, "yo" }, 
            { -11339, "yong" }, 
            { -11324, "you" }, 
            { -11303, "yu" }, 
            { -11097, "yuan" }, 
            { -11077, "yue" }, 
            { -11067, "yun" }, 
            { -11055, "za" }, 
            { -11052, "zai" }, 
            { -11045, "zan" },
            { -11041, "zang" }, 
            { -11038, "zao" }, 
            { -11024, "ze" }, 
            { -11020, "zei" }, 
            { -11019, "zen" }, 
            { -11018, "zeng" }, 
            { -11014, "zha" }, 
            { -10838, "zhai" }, 
            { -10832, "zhan" }, 
            { -10815, "zhang" }, 
            { -10800, "zhao" }, 
            { -10790, "zhe" }, 
            { -10780, "zhen" }, 
            { -10764, "zheng" }, 
            { -10587, "zhi" }, 
            { -10544, "zhong" }, 
            { -10533, "zhou" }, 
            { -10519, "zhu" }, 
            { -10331, "zhua" }, 
            { -10329, "zhuai" }, 
            { -10328, "zhuan" }, 
            { -10322, "zhuang" }, 
            { -10315, "zhui" }, 
            { -10309, "zhun" }, 
            { -10307, "zhuo" }, 
            { -10296, "zi" }, 
            { -10281, "zong" }, 
            { -10274, "zou" }, 
            { -10270, "zu" }, 
            { -10262, "zuan" }, 
            { -10260, "zui" }, 
            { -10256, "zun" }, 
            { -10254, "zuo" } 
        };
        #endregion

        #region 将字符串转换层拼音 +static string ToPinYin(this string str)
        /// <summary>
        /// 将字符串转换层拼音
        /// </summary>
        /// <remarks>
        ///  2013-12-29 17:42:30 Created By iceStone
        /// </remarks>
        /// <param name="str">待转换的字符串</param>
        /// <returns>拼音</returns>
        public static string ToPinYin(this string str)
        {
            str = str.Trim();
            var result = new StringBuilder();//使用StringBuilder优化字符串连接
            var arrChar = str.ToCharArray();
            foreach (char c in arrChar)
            {
                var arr = Encoding.Default.GetBytes(c.ToString(CultureInfo.InvariantCulture));   //每个汉字为2字节 
                if (arr.Length == 1)//如果只有1字节说明该字符不是汉字，结束本次循环 
                {
                    result.Append(c.ToString(CultureInfo.InvariantCulture));
                    continue;

                }
                int arr1 = arr[0];
                int arr2 = arr[1];
                int charCode = arr1 * 256 + arr2 - 65536;

                if (charCode > -10254 || charCode < -20319)  //如果不在汉字编码范围内则不改变 
                {
                    result.Append(c);
                }
                else
                {
                    //根据汉字编码范围查找对应的拼音并保存到结果中 
                    //由于charCode的键不一定存在，所以要找比他更小的键上一个键
                    if (!PinYinDict.ContainsKey(charCode))
                    {
                        for (int i = charCode; i <= 0; --i)
                        {
                            if (!PinYinDict.ContainsKey(i)) continue;
                            result.AppendFormat(" {0} ", PinYinDict[i]);
                            break;
                        }
                    }
                    else
                    {
                        result.AppendFormat(" {0} ", PinYinDict[charCode]);
                    }
                }
            }
            return result.ToString();
        } 
        #endregion
    }
}


        //#region 获取语言化字符串 +static string GetCultureString(this HttpContext context, string key)
        ///// <summary>
        ///// 获取语言化字符串
        ///// </summary>
        ///// <remarks>
        /////  2013-12-22 17:42:30 Created By iceStone
        ///// </remarks>
        ///// <param name="server">HttpContext.Server</param>
        ///// <param name="key">原文键</param>
        ///// <returns>语言化字符串</returns>
        //public static string GetCultureString(this HttpServerUtility server, string key)
        //{
        //    if (server == null) return key;
        //    var vPath = string.Format("~/Content/Culture/lang.{0}.resources", "zh-cn");
        //    var fPath = server.MapPath(vPath);
        //    if (!File.Exists(fPath)) fPath = server.MapPath("~/Content/Culture/lang.resources");
        //    if (!File.Exists(fPath)) return key;
        //    using (var set = new ResourceSet(fPath))
        //    {
        //        //CacheHelper.SetCache(vPath, set);
        //        var res = set.GetString(key);
        //        return string.IsNullOrEmpty(res) ? key : res;
        //    }
        //}
        //#endregion